#include"Queue.h"
#include"Mystack.h"
static MyStack* myStackCreate() {
    MyStack* obj = (MyStack*)malloc(sizeof(MyStack));
    QueueInit(&(obj->q1));
    QueueInit(&(obj->q2));
    return obj;
}

void myStackPush(MyStack* obj, int x) {
    if (!QueueEmpty(&(obj->q1)))
    {
        QueuePush(&(obj->q1), x);
    }
    else {
        QueuePush(&(obj->q2), x);
    }
}

int myStackPop(MyStack* obj) {
    Queue* empty = &(obj->q1);
    Queue* notempty = &(obj->q2);
    if (!QueueEmpty(&(obj->q1))) {
        notempty = &(obj->q1);
        empty = &(obj->q2);
    }
    while (QueueSize(notempty) > 1) {
        QueuePush(empty, QueueFront(notempty));
        QueuePop(notempty);
    }
    int top = QueueBack(notempty);
    QueuePop(notempty);
    return top;
}

int myStackTop(MyStack* obj) {
    if (!QueueEmpty(&(obj->q1))) {
        return QueueBack(&(obj->q1));
    }
    else {
        return QueueBack(&(obj->q2));
    }
}

bool myStackEmpty(MyStack* obj) {
    return QueueEmpty(&(obj->q1)) && QueueEmpty(&(obj->q2));
}

void myStackFree(MyStack* obj) {
    QueueDestroy(&(obj->q1));
    QueueDestroy(&(obj->q2));
    free(obj);
}